function edadDecimalActual(diaNacimiento, mesNacimiento, anoNacimiento){
	
	var fechaActual = new Date();
	var diaActual = fechaActual.getDate();
	var mesActual = fechaActual.getMonth() + 1;
	var anoActual = fechaActual.getFullYear();

	return edadDecimal(diaNacimiento, mesNacimiento, anoNacimiento,
                       diaActual, mesActual, anoActual);
}

function edadDecimal(diaNacimiento, mesNacimiento, anoNacimiento,
                     diaReferencia, mesReferencia, anoReferencia){

    if(!fechaValida(anoNacimiento, mesNacimiento, diaNacimiento)){
		alert ("Error: La fecha de nacimiento ingresada es invalida.");
		return false;
	}

    if(!fechaValida(anoReferencia, mesReferencia, diaReferencia)){
		alert ("Error: La fecha de referencia ingresada es invalida.");
		return false;
	}

    diaNacimiento = new Number(diaNacimiento);
    mesNacimiento = new Number(mesNacimiento);
    anoNacimiento = new Number(anoNacimiento);
    diaReferencia = new Number(diaReferencia);
    mesReferencia = new Number(mesReferencia);
    anoReferencia = new Number(anoReferencia);

	var edadDecimal = ((anoReferencia * 365.25 + mesReferencia * 30.6 + diaReferencia) -
					   (anoNacimiento * 365.25 + mesNacimiento * 30.6 + diaNacimiento)) / 365.25;

	edadDecimal = Math.round(edadDecimal * 10) / 10;

	return edadDecimal;

}

function contextura(talla, munieca){
    if(munieca <= 0){
        return "Indefinido";
    }
    
    return Number(talla / munieca).toFixed(2).toString();
}

function imc(peso, talla){

	if(Number(peso) <= 0){
		//alert("Error: el peso debe ser un numero mayor que cero");
		return "";
	}else{
		peso = Number(peso)
	}
	
	if(Number(talla) <= 0){
		//alert("Error: la talla debe ser un numero mayor que cero");
		return "";
	}else{
		talla = Number(talla) / 100;
	}
	
	var imc = peso / (talla * talla);
	
	imc = Math.round(imc * 100) / 100;
	
	return imc;
}

function clasificacionIMC(edad, bmi){
    edad = Number(edad);
    bmi  = Number(bmi);

    if(bmi == 0){
        return "No Clasificado";
    }

    if(edad >= 10 && edad < 60){
        return clasificacionAdultos(bmi);
    }

    if(edad >= 60){
        return clasificacionMayores(bmi);
    }

    return "No Clasificado";
}

function clasificacionAdultos(bmi){

    bmi = Number(bmi);

    if(bmi < 17){
        return "Delgadez Excesiva";
    }
    if(bmi >= 17 && bmi < 18.5){
        return "Delgadez";
    }
    if(bmi >= 18.5 && bmi < 25){
        return "Normal";
    }
    if(bmi >= 25 && bmi < 30){
        return "Sobrepeso";
    }
    if(bmi >= 30 && bmi < 35){
        return "Obesidad Grado 1";
    }
    if(bmi >= 35 && bmi < 40){
        return "Obesidad Grado 2";
    }
    if(bmi >= 40){
        return "Obesidad Grado 3";
    }

    return "";
}

function clasificacionMayores(bmi){

    bmi = Number(bmi);

    if(bmi < 18.5){
        return "Desnutrición";
    }
    if(bmi >= 18.5 && bmi < 24){
        return "Riesgo de Desnutrición";
    }
    if(bmi >= 24 && bmi < 27){
        return "Normal";
    }
    if(bmi >= 27 && bmi < 30){
        return "Sobrepeso";
    }
    if(bmi >= 30 && bmi < 35){
        return "Obesidad Grado 1";
    }
    if(bmi >= 35 && bmi < 40){
        return "Obesidad Grado 2";
    }
    if(bmi >= 40){
        return "Obesidad Grado 3";
    }

    return "";
}

function imcAjustado(imc, perimetroCintura, sexo){
    var riesgo = 0;
    imc = Number(imc);
    perimetroCintura = Number(perimetroCintura);

    if(sexo == 'm'){
        if(perimetroCintura < 94){
            riesgo = 0;
        }
        if(perimetroCintura >= 94 && perimetroCintura <= 102){
            riesgo = 2;
        }
        if(perimetroCintura > 102){
            riesgo = 4;
        }
    }
    if(sexo == 'f'){
        if(perimetroCintura < 80){
            riesgo = 0;
        }
        if(perimetroCintura >= 80 && perimetroCintura <= 88){
            riesgo = 2;
        }
        if(perimetroCintura > 88){
            riesgo = 4;
        }
    }
    return imc + riesgo;
}

function imcAjustadoMetabolico(
            imc,
            gananciaPeso,
            relacionTgHdl,
            tensionArterial,
            glucemiaAyunas,
            cintura,
            apnea,
            actividad
         ){

    if(imc > 30){
        return imc + gananciaPeso + relacionTgHdl + tensionArterial + glucemiaAyunas + cintura + apnea + actividad;
    }else{
        return imc;
    }
}

function riesgo(imc){
    var riesgo = "";
    if(imc >= 20 && imc <= 24){
        riesgo = "Muy Bajo";
    }
    if(imc > 24 && imc < 27){
        riesgo = "Bajo";
    }
    if(imc >= 27 && imc < 30){
        riesgo = "Moderado";
    }
    if(imc >= 30 && imc < 40){
        riesgo = "Alto";
    }
    if(imc >= 40){
        riesgo = "Muy Alto";
    }

    return riesgo;
}

function red(params){
    if(params.metabolismo == "normometabolico"){
        return redNormomotabolico(params);
    }else if(params.metabolismo == "hipermetabolico"){
        return redHipermetabolico(params);
    }
    return 0;
}

function redNormomotabolico(params){
    var arrAfMasculino = [1, 1.11, 1.25, 1.48];
    var arrAfFemenino  = [1, 1.12, 1.27, 1.45];
    var arrEmbarazo = [0, 340, 450];
    var arrLactancia = [0, 330, 400];

    var edad      = Number(params.edad);
    var af        = 0
    var peso      = Number(params.peso);
    var talla     = Number(params.talla) / 100;
    var embarazo  = Number(arrEmbarazo[params.embarazo]);
    var lactancia = Number(arrLactancia[params.lactancia]);

    if(peso == 0){
        return 0;
    }

    if(params.sexo == 'm'){
        af = Number(arrAfMasculino[params.af]);
        var redM = (662-9.53 * edad + af * (15.91 * peso + 539.6 * talla)).toFixed(2);
        return redM;
    }
    if(params.sexo == 'f'){
        af = Number(arrAfFemenino[params.af]);
        var redF = (354 - (6.91 * edad) + af * (9.36 * peso + 726 * talla) + embarazo + lactancia).toFixed(2);
        return redF;
    }
    return 0;
}

function redHipermetabolico(params){
    var arrEstres = [1.1, 1.25, 1.5];
    var edad  = Number(params.edad);
    var af    = arrEstres[params.estres];
    var peso  = Number(params.peso);
    var talla = Number(params.talla);

    if(peso == 0){
        return 0;
    }

    if(params.sexo == 'm'){
        var redM = ((66.47+(13.75 * peso) +(5 * talla)-(6.76 * edad)) * af).toFixed(2);
        return redM;
    }
    if(params.sexo == 'f'){
        var redF = ((655.1+(9.56 * peso) + (1.85 * talla) - (4.6 * edad)) * af).toFixed(2);
        return redF;
    }
    return 0;
}

function redDirecto(params){
    if(params.metabolismo == "normometabolico"){
        return redDirectoNormometabolico(params);
    }else if(params.metabolismo == "hipermetabolico"){
        return redDirectoHipermetabolico(params);
    }
    return 0;
}

function redDirectoNormometabolico(params){
    var arrAf = [21, 22.5, 27.5, 32.5];
    var af   = arrAf[params.directoMetabolico];
    var peso = Number(params.peso);

    return (af * peso).toFixed(2);
}

function redDirectoHipermetabolico(params){
    var arrAf = [40, 32.5, 25];
    var af   = arrAf[params.estres];
    var peso = Number(params.peso);

    return (af * peso).toFixed(2);
}

function cocienteCinturaCadera(cintura, cadera, sexo){
    cintura = Number(cintura);
    cadera = Number(cadera);
    if(cintura == 0 || cadera == 0){
        return 'Indefinido'
    }
    cociente = cintura / cadera;
    if(sexo == 'm'){
        if(cociente < 0.71){
            return "Bajo";
        }else if(cociente <= 0.85){
            return "Normal";
        }else{
            return "Alto";
        }
    }

    if(sexo == 'f'){
        if(cociente < 0.78){
            return "Bajo";
        }else if(cociente <= 0.94){
            return "Normal";
        }else{
            return "Alto";
        }
    }

    return 'Indefinido';
}